﻿'''
541反转字符串2
给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个，则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
示例 1：
输入：s = "abcdefg", k = 2
输出："bacdfeg"
示例 2：
输入：s = "abcd", k = 2
输出："bacd"
提示：
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
'''
class Solution(object):
    def reverseStr(self,s:str,k:int)->str:
        """
        1. 使用range(start, end, step)来确定需要调换的初始位置
        2. 对于字符串s = 'abc'，如果使用s[0:999] ==> 'abc'。字符串末尾如果超过最大长度，则会返回至字符串最后一个值，
        这个特性可以避免一些边界条件的处理。
        3. 用切片整体替换，而不是一个个替换.
        """
        def reverseSub(t):
            left, right = 0, len(t) - 1
            while left < right:
                t[left], t[right] = t[right], t[left]
                left += 1
                right -= 1
            return t
        result = list(s)
        for i in range(0,len(s),2*k):
            result[i:i+k] = reverseSub(result[i:i+k])
        return ''.join(result)
#示例
if __name__ == '__main__':
    s = "abcdefg"
    k = 2
    s1= "abcdefghij"
    k1 = 3
    print(Solution().reverseStr(s,k))
    print(Solution().reverseStr(s1,k1))


